package JZOffer;

/**
 * 剑指 Offer 15. 二进制中1的个数
 * 编写一个函数，输入是一个无符号整数（以二进制串的形式），
 * 返回其二进制表达式中数字位数为 '1' 的个数（也被称为 汉明重量).）。
 * **/
class Solution15 {
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        //每次n&(n-1) 会减少n中最后的1，对前面的1没有影响
        //计数器sum
        int sum = 0;

        while (n != 0) {
            //每次把n二进制的最后一位1变成0
            n = (n & (n-1));
            sum++;
        }
        return sum;
    }
}